一樣先上圖
今天我們要處理的是Sign,在文件中或在看到產出規則,可以看到Hash為永豐金提供,
Nonce我們已經透過api取得,因此接下來我們要處理HashID的部份。
5.4.2. Hash ID 計算Hash ID 是透過位元運算(XOR)將四組 Hash 計算產出的,
將 A1/A2 以 XOR 運算所得的字串,再與 B1/B2 以 XOR 運算出來的字串,
二個相加後將英文轉換為大寫,為長度為 32 的字串(例: 17D8E6558DC60E702A6B57E1B9B7060D。
$hash = [
'A1' => '4D9709D699CA40EE',
'A2' => '5A4FEF83140C4E9E',
'B1' => 'BC74301945134CB4',
'B2' => '961F67F8FCA44AB9'
];
//取得 Hash ID 計算方法
function getHashID($hash){
$Byte_A1 = strToHexBytes($hash["A1"]);
$Byte_A2 = strToHexBytes($hash["A2"]);
$Byte_B1 = strToHexBytes($hash["B1"]);
$Byte_B2 = strToHexBytes($hash["B2"]);
$XOR1 = setXOR($Byte_A1, $Byte_A2);
//echo hexBytesToString($XOR1) 17D8E6558DC60E70
$XOR2 = setXOR($Byte_B1, $Byte_B2);
//echo hexBytesToString($XOR1) 2A6B57E1B9B7060D
$result = hexBytesToString($XOR1).hexBytesToString($XOR2);
return $result;
}
其中strToHexBytes、setXOR、hexBytesToString會於範例檔中看到,
這邊個人認為學習成本很高...,如果不看code直接看文件要產出有一定難度,
須先了解xor運算的一些規範,請參考
https://www.php.net/manual/en/language.operators.bitwise.php
這邊講一下大概流程,先對將hash(a1,a2,b1,b2)轉16位元,
然後按造文件流程在進行xor運算,最後在轉回字串進行組合,
最後就會取得最後的HashID,不過文件中是先將字串相加在轉英文大寫,
但範例code裡面是先轉英文大寫在相加,雖然結果是一樣,
但有些人可能會覺得很奇怪,這邊提醒一下有該情況。
這邊可能會有些人覺得難以理解,個人建議這種金融加密的部份,本來規則就很複雜,
通常都是直接透過金流端提供的範例以及類sdk工具包來處理,來確保安全性,
因此我們只要了結流程跟會使用即可。
整個基礎流程到HashID終於快一半了,接下來我們會透過前幾天的內容組合出api
所需要的內容,將前幾天的東西串起來得感覺還是不錯的。